/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package server.negocio;

import server.excepciones.UsuarioYaExistenteException;
import cliente.comunicacion.ICliente;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import server.dominio.Beneficiario;
import server.dominio.Medico;
import server.dominio.Usuario;
import server.excepciones.BeneficiarioInexistenteException;
import server.excepciones.BeneficiarioYaExistenteException;
import server.excepciones.MedicoNoExistenteException;
import server.excepciones.MedicoYaExistenteException;
import server.excepciones.UsuarioIncorrectoException;
import server.senders.Sender_datos;

/**
 *
 * @author tpaxle
 */
public class Controlador_G_Usuarios {
    private Fachada_Servidor fachada_basedats;
    private Controlador_Servidor c_servidor;

    public Controlador_G_Usuarios(Controlador_Servidor c_servidor){
            //Lee su Configuracion
            fachada_basedats= new Fachada_Servidor();
            this.c_servidor= c_servidor;
    }

  


    /*Modificacion de Personas*/


    private Medico getmedico() throws SQLException{
        //Dependiendo de las opciones devolver un tipo de medico u otro
        return (Medico) fachada_basedats.getMedicos().get(0);
    }

    public void modificarBeneficiario(long idSesion, Beneficiario beneficiario) throws UsuarioIncorrectoException, SQLException, BeneficiarioInexistenteException {
          if(c_servidor.comprobarUsuario(1, idSesion)){
            

          }
    }

     public void modificarMedico(long idSesion, Medico medico) throws UsuarioIncorrectoException, SQLException, MedicoNoExistenteException {
          if(c_servidor.comprobarUsuario(1, idSesion)){
            
          }
    }

    public Beneficiario obtenerBeneficiario(long idSesion, String dni) throws UsuarioIncorrectoException, SQLException, BeneficiarioInexistenteException {
        Beneficiario beneficiario = null;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            beneficiario= fachada_basedats.getBeneficiario(dni);
        }
        return beneficiario;
    }

    public Medico obtenerMedico(long idSesion, String dni) throws UsuarioIncorrectoException, SQLException, MedicoNoExistenteException {
        Medico medico = null;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            medico= fachada_basedats.getMedico(dni);
        }
        return medico;
    }

    public void obtenerDatosTablas(long idSesion) throws SQLException, UsuarioIncorrectoException, RemoteException{
        ArrayList<Object> usuarios;
        ArrayList<Object> beneficiarios;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            usuarios= fachada_basedats.getUsuarios();
            beneficiarios= fachada_basedats.getBeneficiarios();
            ICliente cliente= c_servidor.getCliente(idSesion);


            //            //Aqui ejecutamos una nueva tarea para comunicarse con el cliente y le envia la tabla
            Sender_datos sender= new Sender_datos(cliente, usuarios, beneficiarios);
            sender.start();
        }
    }






 /*Insercion de Usuarios*/
    /******************************************************************/
    /*Insercion Beneficiario*/
    public void crearbeneficiario(long idSesion, Beneficiario beneficiario) throws UsuarioIncorrectoException, SQLException, BeneficiarioYaExistenteException, Exception {
        if(c_servidor.comprobarUsuario(1, idSesion)){
            fachada_basedats.nuevobeneficiario(beneficiario);
        }
    }

    /*Insercion de Medicos*/
    public void crearmedico(long idSesion, Medico medico) throws SQLException, UsuarioIncorrectoException, UsuarioYaExistenteException, MedicoYaExistenteException{
        //Comprueba si el de la sesion idSesion es administrador y el login que le hemos pasao es correcto(No existe)
        if(c_servidor.comprobarUsuario(1, idSesion)){
            //Ahora comprobamos que el login, nif es correcto, si se intenta insertar pero hay un constraintviolationexception ya hay algun otro
            fachada_basedats.nuevousuario(medico);
            fachada_basedats.nuevomedico(medico);
        }
    }
    /*Fin Insercion Beneficiario*/
    public void crearUsuario(long idSesion, Object usuario) throws UsuarioIncorrectoException, UsuarioYaExistenteException, SQLException, Exception {
        Usuario usuario_aux= (Usuario)usuario;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            fachada_basedats.nuevousuario((Usuario)usuario_aux);
        }
    }

}
